package cn.sc.hunter.framework.helper;

import cn.sc.hunter.framework.annotation.Controller;
import cn.sc.hunter.framework.annotation.Service;
import cn.sc.hunter.framework.util.ClassUtil;

import java.util.HashSet;
import java.util.Set;

/**
 * 类操作助手
 */
public final class ClassHelper {
    /**
     * 用来存放加载的类集合
     */
    private final static Set<Class<?>> CLASS_SET;

    static {
        CLASS_SET = ClassUtil.getClassSet(ConfigHelper.getWebBasePackage());
    }

    /**
     * 获取默认基础包下的所有类集合
     */
    public static Set<Class<?>> getClassSet(){
        return CLASS_SET;
    }

    /**
     * 获取默认基础应用包下的所有 Service 注解类
     */
    public static Set<Class<?>> getServiceClassSet(){
        Set<Class<?>> set = new HashSet<>();
        for (Class<?> clazz : CLASS_SET) {
            if (clazz.isAnnotationPresent(Service.class)) {
                set.add(clazz);
            }
        }
        return set;
    }

    /**
     * 获取默认基础应用包下的所有 Controller 注解类
     */
    public static Set<Class<?>> getControllerClassSet(){
        Set<Class<?>> set = new HashSet<>();
        for (Class<?> clazz : CLASS_SET) {
            if (clazz.isAnnotationPresent(Controller.class)) {
                set.add(clazz);
            }
        }
        return set;
    }

    /**
     * 获取默认基础应用包下的所有 Service/Controller 注解类
     */
    public static Set<Class<?>> getBeanClassSet(){
        Set<Class<?>> set = new HashSet<>();
        set.addAll(getServiceClassSet());
        set.addAll(getControllerClassSet());
        return set;
    }
}
